import axios from 'axios'
import useAuthStore from '@/store/auth'
import { Message } from '@arco-design/web-vue'
import router from '@/router'

// 创建axios实例
const api = axios.create({
	baseURL: import.meta.env.VITE_APP_BASE_API,
	timeout: 3000,
})

// 请求拦截器
api.interceptors.request.use((config) => {
	const authStore = useAuthStore()
	if (authStore.token) {
		config.headers.Authorization = authStore.token
	}
	return config
})

// 响应拦截器
api.interceptors.response.use(
	(response) => {
		if (response.data.code != 200) {
			Message.clear()
			Message.error({
				content: response.data.message,
			})
			return Promise.reject()
		}
		return response.data
	},
	(error) => {
		let message = ''
		if (error.message.indexOf('timeout') !== -1) {
			message = '请求超时，请您稍后重试'
		} else if (error.message.indexOf('canceled') !== -1) {
			// 请求取消
		} else if (error.response) {
			switch (error.response.status) {
				case 401:
					// 服务器退出登录
					router.replace({
						path: '/login',
						query: { redirect: router.currentRoute.value.fullPath },
					})
					// 客户端退出登录
					useAuthStore().logout()
					message = '登录已失效，请您重新登录'
					break
				case 403:
					message = '您没有访问此功能的权限'
					break
				case 404:
					message = '请求地址错误'
					break
				case 405:
					message = '请求地址错误'
					break
				case 500:
					message = '系统繁忙，请稍后再试'
					break
				case 503:
					message = '系统维护中，请稍后访问'
					break
				default:
					message =
						error.response.data.message || '系统繁忙，请稍后再试'
					break
			}
		} else {
			message = '网络连接失败'
		}
		if (message) {
			Message.clear()
			Message.error({
				content: message,
			})
		}
		return Promise.reject(error)
	}
)

export default api
